/**
 * 
 */
package fbv.distribuidora.cliente.negocio;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.StringTokenizer;

import fbv.commun.dataTools.negocio.EntidadePardraoImpl;
import fbv.commun.excecoes.FBVError;
import fbv.commun.excecoes.FBVException;
import fbv.commun.excecoes.FBVObijetoInvalidoException;
import fbv.commun.util.DTRConstantes;
import fbv.commun.util.DTRMensagens;
import fbv.commun.util.Util;
import fbv.distribuidora.cliente.servico.Cliente;

/**
 * @author Max Santu
 *
 */
public class ClienteImpl extends EntidadePardraoImpl implements Cliente {

	private static final String TOKEN = "##";
	private String razaoSocial;
	private String endereco;
	private String cnpj;
	private Date dataCadastro;
	private String usuario;
	private String senha;

	/**
	 * 
	 */
	public ClienteImpl() {
		// TODO Auto-generated constructor stub
	}

	public String getUsuario() {
		return usuario;
	}

	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public String getCnpj() {
		return cnpj;
	}

	public void setCnpj(String cnpj) {
		this.cnpj = cnpj;
	}

	public String getRazaoSocial() {
		return razaoSocial;
	}

	public void setRazaoSocial(String razaoSocial) {
		this.razaoSocial = razaoSocial;
	}

	public String getEndereco() {
		return endereco;
	}

	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}

	public Date getDataCadastro() {
		return dataCadastro;
	}

	public void setDataCadastro(Date dataCadastro) {
		this.dataCadastro = dataCadastro;
	}

	public void setEndereco(String rua, String numero, String cep, String bairro, String cidade, String estado){
		StringBuffer end = new StringBuffer();
		end.append(rua);
		end.append(TOKEN);
		end.append(numero);
		end.append(TOKEN);
		end.append(cep);
		end.append(TOKEN);
		end.append(bairro);
		end.append(TOKEN);
		end.append(cidade);
		end.append(TOKEN);
		end.append(estado);
		setEndereco(end.toString());
	}

	/**
	 * @author Lenildo
	 * @return
	 */
	public String getEnderecoFormatado() {
		StringBuffer enderecoFormatado = new StringBuffer();
		if (Util.isCampoPreenchido(endereco)) {
			StringTokenizer tokenizer = new StringTokenizer(endereco, TOKEN);
			enderecoFormatado.append("Logradouro: ");
			enderecoFormatado.append(tokenizer.nextToken());

			enderecoFormatado.append("Numero: ");
			enderecoFormatado.append(tokenizer.nextToken());

			enderecoFormatado.append("CEP: ");
			enderecoFormatado.append(tokenizer.nextToken());

			enderecoFormatado.append("Bairro: ");
			enderecoFormatado.append(tokenizer.nextToken());

			enderecoFormatado.append("Cidade: ");
			enderecoFormatado.append(tokenizer.nextToken());

			enderecoFormatado.append("UF: ");
			enderecoFormatado.append(tokenizer.nextToken());
		}
		return enderecoFormatado.toString();
	}

	public String getEnderecoLogradouro(){
		String logradouro = "";

		if(endereco != null){
			Object[] enderecoArray = Util.converterStringEmArray(TOKEN, endereco);
			if(enderecoArray.length >= 1){
				logradouro = enderecoArray[0].toString();
			}
		}
		return logradouro;
	}

	public String getEnderecoNumero(){
		String numero = "";

		if(endereco != null){
			Object[] enderecoArray = Util.converterStringEmArray(TOKEN, endereco);
			if(enderecoArray.length >= 2){
				numero = enderecoArray[1].toString();
			}
		}
		return numero;
	}

	public String getEnderecoCEP(){
		String cep = "";

		if(endereco != null){
			Object[] enderecoArray = Util.converterStringEmArray(TOKEN, endereco);
			if(enderecoArray.length >= 3){
				cep = enderecoArray[2].toString();
			}
		}
		return cep;
	}

	public String getEnderecoBairro(){
		String bairro = "";

		if(endereco != null){
			Object[] enderecoArray = Util.converterStringEmArray(TOKEN, endereco);
			if(enderecoArray.length >= 4){
				bairro = enderecoArray[3].toString();
			}
		}
		return bairro;
	}

	public String getEnderecoCidade(){
		String cidade = "";

		if(endereco != null){
			Object[] enderecoArray = Util.converterStringEmArray(TOKEN, endereco);
			if(enderecoArray.length >= 5){
				cidade = enderecoArray[4].toString();
			}
		}
		return cidade;
	}

	public String getEnderecoUF(){
		String uf = "";

		if(endereco != null){
			Object[] enderecoArray = Util.converterStringEmArray(TOKEN, endereco);
			if(enderecoArray.length >= 6){
				uf = enderecoArray[5].toString();
			}
		}
		return uf;
	}

	/* (non-Javadoc)
	 * @see fbv.commun.dataTools.negocio.EntidadePardraoImpl#validarDadosEntidade()
	 */
	@Override
	protected void validarDadosEntidade() throws FBVException {
		List erros = new ArrayList();
		List camposObrigatorios = new ArrayList();

		if (Util.isCampoVazio(razaoSocial)) {
			camposObrigatorios.add(Cliente.CAMPO_ROTULO_RAZAO_SOCIAL);
			System.out.println(Cliente.CAMPO_ROTULO_RAZAO_SOCIAL);
		}

		if (Util.isCampoVazio(endereco)) {
			camposObrigatorios.add(Cliente.CAMPO_ROTULO_ENDERECO);
		}

		if (Util.isCampoVazio(cnpj)) {
			camposObrigatorios.add(Cliente.CAMPO_ROTULO_CNPJ);
			System.out.println(Cliente.CAMPO_ROTULO_RAZAO_SOCIAL);
		}

		if (Util.isCampoVazio(usuario)) {
			camposObrigatorios.add(Cliente.CAMPO_ROTULO_USUARIO);
			System.out.println(Cliente.CAMPO_ROTULO_RAZAO_SOCIAL);
		}

		if (Util.isCampoVazio(senha)) {
			camposObrigatorios.add(Cliente.CAMPO_ROTULO_SENHA);
			System.out.println(Cliente.CAMPO_ROTULO_RAZAO_SOCIAL);
		}

		//if (Util.isCampoVazio(dataCadastro)) {
		//	camposObrigatorios.add(Cliente.CAMPO_ROTULO_DATA_CADASTRO);
		//} else if (dataCadastro.after(Calendar.getInstance().getTime())) {
		//	erros.add(new FBVError(DTRConstantes.BUNDLE, DTRMensagens.MSG003, Util.converterDateEmString(Calendar.getInstance().getTime())));
		//}

		if (Util.isCampoPreenchido(camposObrigatorios)) {
			erros.add(new FBVError(DTRConstantes.BUNDLE, DTRMensagens.MSG002, Util.converterCollectionEmString(", ", camposObrigatorios)));
		}

		if (Util.isCampoPreenchido(erros)) {
			throw new FBVObijetoInvalidoException(erros);
		}
	}


}
